#include <head.h>
// 1、 需要再head.h 中添加 pthread.h 这个库  #include <pthread.h>
// 2、 编译的时候 需要连接 


/*
头文件
    #include <pthread.h>
函数原型
    int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);
函数参数
    thread  用来保存新线程 ID 的缓冲区的首地址   TID
        需用使用 一个 pthread_t 类型的变量 然后将这个变量的首地址 传入到 pthread_create
    attr    指向线程属性的结构
                可以直接给NULL
    void *(*start_routine) (void *)
        线程执行的函数 需要注意的是， 这个线程函数的格式一定要相同
    arg 传给线程函数的参数
            如果不止一个参数 则传入结构体
返回值 
    成功    返回0
    失败    返回错误码
*/


/*
函数原型
int pthread_join(pthread_t thread, void **retval);
功能:
	1、在主线程中 等待 线程结束  会阻塞等待 直到目标结束
    2、获取线程退出状态 通过 retval 来获取退出的状态 通过 return 返回的值
参数:
    thread 等待回收的线程
    retval 线程的返回 状态
返回值：
    成功    返回0
    失败    返回错误码
*/

void * func(void *arg)
{
    printf("调用了线程\n");
    sleep(1);
}


int main(int argc, char const *argv[])
{
    pthread_t Tid = 0;

    int thread_erron = 0; // 错误码

    if( 0 < (thread_erron = pthread_create(&Tid , NULL , func , NULL)))
    {
        printf("线程创建失败 错误码 %d 错误信息 %s\n" , thread_erron , strerror(thread_erron));
        exit(-1);
    }

    // 当我们创建了线程后 如果在线程运行之前 进程结束了， 线程也会一起结束
    pthread_join(Tid , NULL);

    


}